package com.demo.main.utils;

public class PaginationUtil {
    // 默认每页显示的记录数
    public static final int DEFAULT_PAGE_SIZE = 8;

    /**
     * 获取有效的当前页码。
     * 如果传入的当前页码为null，则返回1；如果最大页码小于1，则将最大页码设置为1。
     * 最终返回的页码在1和最大页码之间。
     *
     * @param currentPage 当前页码
     * @param maxPage     最大页码
     * @return 有效的当前页码
     */
    public static int getValidPageNum(Integer currentPage, Integer maxPage) {
        int validCurrentPage = (currentPage == null) ? 1 : currentPage; // 如果当前页码为null，则设为1
        int validMaxPage = (maxPage == null || maxPage < 1) ? 1 : maxPage; // 如果最大页码为null或小于1，则设为1

        return Math.max(1, Math.min(validCurrentPage, validMaxPage)); // 返回在1和最大页码之间的有效页码
    }

    /**
     * 获取有效的当前页码。
     * 从字符串中解析出当前页码和最大页码，并调用getValidPageNum方法获取有效的页码。
     *
     * @param currentPageStr 当前页码的字符串表示
     * @param maxPageStr     最大页码的字符串表示
     * @return 有效的当前页码
     */
    public static int getValidPageNum(String currentPageStr, String maxPageStr) {
        int currentPage = parseStringToInt(currentPageStr); // 将当前页码字符串解析为整数
        int maxPage = parseStringToInt(maxPageStr); // 将最大页码字符串解析为整数

        if (maxPage < 1) {
            maxPage = 1; // 如果最大页码小于1，则设为1
        }

        return Math.max(1, Math.min(currentPage, maxPage)); // 返回在1和最大页码之间的有效页码
    }

    /**
     * 将字符串解析为整数。
     * 如果解析失败（例如字符串不是数字），则返回1。
     *
     * @param str 要解析的字符串
     * @return 解析后的整数，如果解析失败则返回1
     */
    private static int parseStringToInt(String str) {
        try {
            return Integer.parseInt(str); // 尝试将字符串解析为整数
        } catch (NumberFormatException e) {
            return 1; // 如果解析失败，返回1
        }
    }

    /**
     * 根据总记录数计算总页数。
     * 使用默认的每页记录数进行计算。
     *
     * @param count 总记录数
     * @return 总页数
     */
    public static Integer pageCount(Integer count) {
        return (count / PaginationUtil.DEFAULT_PAGE_SIZE) + (count % PaginationUtil.DEFAULT_PAGE_SIZE > 0 ? 1 : 0); // 计算总页数
    }
}